package LearnAlgorithm.g_数学问题;

/*
从昏迷中醒来，小明发现自己被关在X星球的废矿车里
矿车停在平直的废弃的轨道上
他的面前是两个按钮，分别写着“F”和“B”
小明突然记起来，这两个按钮可以控制矿车在轨道上前进和后退
按F，会前进97米。按B会后退127米
透过昏暗的灯光，小明看到自己前方1米远正好有个监控探头
他必须设法使得矿车正好停在摄像头的下方，才有机会争取同伴的援助
或许，通过多次操作F和B可以办到
但矿车上的动力已经不太足，黄色的警示灯在默默闪烁...
每次进行F或B操作都会消耗一定的能量
小明飞快地计算，至少要多少次操作，才能把矿车准确地停在前方1米远的地方
请填写为了达成目标，最少需要操作的次数

97x - 127y = 1
ax  + by   = m
 */
public class d一步之遥 {
	private static double x = 0D;
	private static double y = 0D;
	
	public static void main(String[] args) {
		try {
			double d = new d一步之遥().lineByGcd(97, -127, 1);
			System.out.println(Math.abs(x) + Math.abs(y));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public double lineByGcd(double a, double b, double m) throws Exception {
		double d = gcdExtend(a, b);
		if (m % d != 0) {
			throw new Exception("无解");
		}
		x *= (m / d);
		y *= (m / d);
		return d;
	}
	
	public double gcdExtend(double a, double b) {
		if (b == 0D) {
			x = 1D;
			y = 0D;
			return a;
		}
		double res = gcdExtend(b, a % b);
		double x1 = x;
		x = y;
		y = x1 - ((int) (a / b) * y);
		return res;
	}
}
